﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAO;
using DBQLTV;

namespace BUS
{
    public class SachBUS
    {
        SachDAO _SachDAO = new SachDAO();
        public bool InsertSach(string TenSach, string NhaXuatBan, int NamXB, int SoLuong, int GiaTien)
        {
            if (DauSachDAO.GetDauSachByName(TenSach) != null)
            {
                return _SachDAO.InsertSach(DauSachDAO.GetDauSachByName(TenSach), NhaXuatBan, NamXB, SoLuong, GiaTien);
            }
            return false;
        }
        public List<SACH> GetListSach()
        {
            return _SachDAO.GetListSach();
        }
        public bool DeleteSach(string TenSach, string NhaXuatBan, int NamXB)
        {
            if (DauSachDAO.GetDauSachByName(TenSach) != null)
                return _SachDAO.DeleteSach(DauSachDAO.GetDauSachByName(TenSach), NhaXuatBan, NamXB);
            return false;
        }
        public bool DeleteSach(int MaSach)
        {
            return _SachDAO.DeleteSach(MaSach);
        }
        public SACH GetSach(string TenSach, string NhaXuatBan, int NamXB)
        {
            if (DauSachDAO.GetDauSachByName(TenSach) != null)
                return _SachDAO.GetSach(DauSachDAO.GetDauSachByName(TenSach), NhaXuatBan, NamXB);
            return null;
        }
        public DAUSACH GetDauSach(SACH Sach)
        {
            return _SachDAO.GetDauSach(Sach);
        }
        public DAUSACH GetDauSachByMaSach(int MaSach)
        {
            SACH sach = GetSach(MaSach);
            return _SachDAO.GetDauSach(sach);
        }
        public List<CUONSACH> GetListCuonSach(SACH Sach)
        {
            return _SachDAO.GetListCuonSach(Sach);
        }
        public THELOAISACH GetTheLoaiSach(SACH Sach)
        {
            return _SachDAO.GetTheLoaiSach(Sach);
        }
        public THELOAISACH GetTheLoaiSach(int MaSach)
        {
            SACH sach = GetSach(MaSach);
            return _SachDAO.GetTheLoaiSach(sach);
        }
        public List<TACGIA> GetListTacGia(SACH Sach)
        {
            return _SachDAO.GetListTacGia(Sach);
        }
        public List<TACGIA> GetListTacGia(int MaSach)
        {
            SACH sach = GetSach(MaSach);
            return _SachDAO.GetListTacGia(sach);
        }
        public List<string> GetListTenTacGia(int MaSach)
        {
            SACH sach = GetSach(MaSach);
            List<string> result = new List<string>();     
            List<TACGIA> listTG= _SachDAO.GetListTacGia(sach);
            foreach (TACGIA tg in listTG)
            {
                if(!result.Contains(tg.TenTacGia))
                {
                    result.Add(tg.TenTacGia);
                }
            }
            return result;
        }
        public List<string> GetTheLoaiByTenSach(string TenSach)
        {
            return _SachDAO.GetTheLoaiByTenSach(TenSach);
        }

        public List<List<TACGIA>> GetListTacGiaByTenSach(string TenSach)
        {
            return _SachDAO.GetListTacGiaByTenSach(TenSach);
        }
        public List<int> GetMaCuonSachByTenSach(string TenSach)
        {
            var listSach = from temp in GetListSach()
                           where GetDauSach(temp).TenSach.Equals(TenSach)
                           select temp;
            List<int> result = new List<int>();
            foreach (var item in listSach)
            {
                foreach (CUONSACH cuonsach in GetListCuonSach(item))
                {
                    if (!result.Contains(cuonsach.MaCuonSach))
                        result.Add(cuonsach.MaCuonSach);
                }
            }
            return result;
        }
        public List<string> GetListTenNXB()
        {
            List<string> result = new List<string>();
            foreach (SACH sach in GetListSach())
            {
                if (!result.Contains(sach.NhaXB))
                {
                    result.Add(sach.NhaXB);
                }
            }
            return result;
        }
        public SACH GetSach(int MaSach)
        {
            return _SachDAO.GetSach(MaSach);
        }
    }
}
